﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using _4.Modelado.Inventario;

namespace _3.Datos.Inventario
{
    public class ArticuloBD
    {
        /// <summary>
        /// Este método inserta y modifica una área
        /// </summary>
        /// <param name="comando">sentencia SQL</param>
        /// <param name="obj">Contiene las variable de Articulo</param>
        public void ArticuloGuardar(SqlCommand comando, Articulo obj)
        {
            try
            {
                string sp = "usp_ArticuloGuardar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@PK_Articulo", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@ArticuloNombre", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("@ArticuloCosto", SqlDbType.Money));
                comando.Parameters.Add(new SqlParameter("@ArticuloEstado", SqlDbType.Bit));
                comando.Parameters.Add(new SqlParameter("@FK_Linea_Articulo", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@FK_UMedida_Articulo", SqlDbType.Int ));
                comando.Parameters.Add(new SqlParameter("@ArticuloExistencia_Global", SqlDbType.Decimal));


                comando.Parameters[0].Value = obj.iPK_Articulo;
                comando.Parameters[1].Value = obj.sArticuloNombre;
                comando.Parameters[2].Value = obj.dArticuloCosto;
                comando.Parameters[3].Value = obj.bArticuloEstado;
                comando.Parameters[4].Value = obj.iFK_Linea_Articulo;
                comando.Parameters[5].Value = obj.iFK_UMedida_Articulo;
                comando.Parameters[6].Value = obj.dArticuloExistencia_Global;              

                comando.ExecuteNonQuery();


            }
            catch (Exception exc)
            {

                throw exc;
            }
        }



        public List<Articulo> ArticulosConsultar(SqlCommand comando)
        {
            try
            {
                string sp = "usp_ArticuloConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                var lista = new List<Articulo>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var obj = new Articulo();

                    obj.iPK_Articulo = Convert.ToInt32(dt.Rows[i]["PK_Articulo"]);
                    obj.sArticuloNombre = Convert.ToString(dt.Rows[i]["ArticuloNombre"]);
                    obj.dArticuloCosto = Convert.ToDecimal(dt.Rows[i]["ArticuloCosto"]);
                    obj.bArticuloEstado = Convert.ToBoolean(dt.Rows[i]["ArticuloEstado"]);
                    obj.iFK_Linea_Articulo = Convert.ToInt32(dt.Rows[i]["FK_Linea_Articulo"]);
                    obj.iFK_UMedida_Articulo = Convert.ToInt32(dt.Rows[i]["FK_UMedida_Articulo"]);
                    obj.dArticuloExistencia_Global = Convert.ToDecimal(dt.Rows[i]["ArticuloExistencia_Global"]);

                    lista.Add(obj);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public List<Articulo> Articulos_ActivosConsultar(SqlCommand comando)
        {
            try
            {
                string sp = "usp_Articulos_ActivosConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                var lista = new List<Articulo>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var obj = new Articulo();

                    obj.iPK_Articulo = Convert.ToInt32(dt.Rows[i]["PK_Articulo"]);
                    obj.sArticuloNombre = Convert.ToString(dt.Rows[i]["ArticuloNombre"]);
                    obj.dArticuloCosto = Convert.ToDecimal(dt.Rows[i]["ArticuloCosto"]);
                    obj.bArticuloEstado = Convert.ToBoolean(dt.Rows[i]["ArticuloEstado"]);
                    obj.iFK_Linea_Articulo = Convert.ToInt32(dt.Rows[i]["FK_Linea_Articulo"]);
                    obj.iFK_UMedida_Articulo = Convert.ToInt32(dt.Rows[i]["FK_UMedida_Articulo"]);
                    obj.dArticuloExistencia_Global = Convert.ToDecimal(dt.Rows[i]["ArticuloExistencia_Global"]);

                    lista.Add(obj);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }
       
        public List<Articulo> Articulos_ActivosPorBodegaConsultar(SqlCommand comando, int FKBodega)
        {
            try
            {
                string sp = "usp_Articulos_ActivosPorBodegaConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@FKBodega", SqlDbType.Int));

                comando.Parameters[0].Value = FKBodega;

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                var lista = new List<Articulo>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var obj = new Articulo();

                    obj.iPK_Articulo = Convert.ToInt32(dt.Rows[i]["PK_Articulo"]);
                    obj.sArticuloNombre = Convert.ToString(dt.Rows[i]["ArticuloNombre"]);
                    obj.dArticuloCosto = Convert.ToDecimal(dt.Rows[i]["ArticuloCosto"]);
                    obj.bArticuloEstado = Convert.ToBoolean(dt.Rows[i]["ArticuloEstado"]);
                    obj.iFK_Linea_Articulo = Convert.ToInt32(dt.Rows[i]["FK_Linea_Articulo"]);
                    obj.iFK_UMedida_Articulo = Convert.ToInt32(dt.Rows[i]["FK_UMedida_Articulo"]);
                    obj.dArticuloExistencia_Global = Convert.ToDecimal(dt.Rows[i]["ArticuloExistencia_Global"]);

                    lista.Add(obj);
                }
                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }
        
        /// <summary>
        /// Llena un data table para poder 
        /// llenar el combo Articulo
        /// </summary>
        /// <param name="comando"></param>
        /// <returns>DataTable Articulo</returns>

        public DataTable LlenarComboArticulo(SqlCommand comando)
        {
            try
            {
                string sp = "usp_ArticuloConsultar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                var ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];


                return ds.Tables[0];
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public void ArticuloEliminar(SqlCommand comando, Articulo obj)
        {
            try
            {
                string sp = "usp_ArticuloEliminar";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@PK_Articulo", SqlDbType.Int));
                comando.Parameters[0].Value = obj.iPK_Articulo;


                comando.ExecuteNonQuery();

            }
            catch (Exception e)
            {

                throw e;
            }
        }
    }
}
